DAL Delete methode
Home

DAL Delete methode

DAL Delete methode

Eén rij uit de tabel verwijderen

Probleem

We hebben de id van de te deleted rij nodig om de te deleten rij in de tabel op te zoeken.

We willen feedback geven aan de gebruiker over de delete. Er zijn drie toestanden die we in de gaten moeten houden:

  1. database foutmelding
  2. sql foutmelding
  3. delete is gelukt

Design

We gebruiken een try catch om feedback te geven op systeemfouten en SQL server fouten. We interpreteren de retourwaarde van de ExecuteNonQuery methode. Als parameter geven we een BBL object mee. In ASP.NET MVC is dat vaak het model. Als de Id niet bestaat zal SQL een 0 waarde retourneren.

Oplossing

Voeg de Delete methode toe aan de Dal klasse:

public int Delete(int Id)
{
    MySqlConnection connection = new MySqlConnection(this.connectionString);
    // in de CommandText parameter geven we de naam van de stored procedure mee
    MySqlCommand command = new MySqlCommand("EventCategoryDelete", connection);
    // zeg aan het command object dat het een stored procedure
    // zal krijgen en geen SQL Statement
    command.CommandType = CommandType.StoredProcedure;
    // voeg de parameters toe die aan de stored procedure doorgegeven moeten worden
    MySqlParameter pId = new MySqlParameter();
    pId.ParameterName = "pId";
    pId.DbType = DbType.Int32;
    // De Id van de rij die  moet worden geüpdated
    pId.Value = Id;
    command.Parameters.Add(pId);

    Message = "Niets te melden";
    // we gaan ervan uit dat het mislukt
    int result = 0;
    using (connection)
    {
        try
        {
            connection.Open();
            //Verbinding geslaagd
            result = command.ExecuteNonQuery();
            // we moeten kijken naar de return van ExecuteNonQuery
            // retourneert het aantal rijen dat geüpdated is
            // is geüpdated als dat getal positief is
            if (result <= 0)
            {
                Message = $"De categorie met de Id {Id} kon niet worden gedeleted!";
            }
            else
            {
                Message = $"De categorie met de Id {Id} is gedeleted!";
            }
        }
        catch (MySqlException e)
        {
            this.message = e.Message;
        }
        RowCount = result;
    }
    // 0 of het aantal rijen dat gedeleted is
    return result;
}

Testen

  1. Voeg de ReadOne methode toe in IDal:
    using System.Collections.Generic;
    namespace FricFrac.Dal
    {
        interface IDal<T>
        {
            string Message { get; }
            int RowCount { get; }
            List<T> ReadAll();
            T ReadOne(int id);
            int Create(T bll);
            int Update(T bll);
            int Delete(int id);
        }
    }
    
  2. Vervolledig de methode FricFracDalTest in het bestand Learning.cs:
    public static void FricFracDalTest()
    {
        Console.WriteLine(" Fric-frac DAL test");
        FricFrac.Dal.EventCategory dal = new FricFrac.Dal.EventCategory();
        List<FricFrac.Bll.EventCategory> list = dal.ReadAll();
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        foreach (FricFrac.Bll.EventCategory item in list)
            Console.WriteLine(" {0} {1}", item.Id, item.Name);
        FricFrac.Bll.EventCategory bll = new FricFrac.Bll.EventCategory();
        bll = dal.ReadOne(4);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        bll = dal.ReadOne(200);
        // we lezen een bestaande categorie in
        bll = dal.ReadOne(6);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we proberen deze gevonden categorie weer toe te voegen
        dal.Create(bll);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we wijzigen de naam van de categorie
        bll.Name = "Hackathon Programmeren";
        // En proberen die toe te voegen
        dal.Create(bll);
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        // we zoeken de naam van de categorie
        bll.Name = "Hackathon Programmeren";
        dal.ReadOne(bll.Id);
        // we wijzigen de naam van de categorie
        bll.Name = "Hackathon Programmeren Deel 2";
        // En proberen die te updaten
        dal.Update(bll);
        Console.WriteLine($" {dal.RowCount} rij(en) gewijzigd, {dal.Message}");
        // nu gaan we de Hackaton categorie deleten (bij mij Id = 23)
        // je moet de Id's nakijken, zeker als je experimenteert met de code
        dal.Delete(23);
        Console.WriteLine($" {dal.RowCount} rij(en) gedeleted, {dal.Message}");
        // zet de naam van categorie met Id = 6 terug op Convention
        // We hebben dit daarnet gewijzigd in Hackathon Programmeren Deel 2
        bll.Id = 6;
        bll.Name = "Convention";
        dal.Update(bll);
        // En toon het nog eens
        list = dal.ReadAll();
        Console.WriteLine($" {dal.RowCount} {dal.Message}");
        foreach (FricFrac.Bll.EventCategory item in list)
            Console.WriteLine(" {0} {1}", item.Id, item.Name);
    }
  3. Roep de methode op in Program.cs:
    using System;
    
    namespace AdoDotNet
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Leren werken met ADO.NET in .NET Core!");
                // Learning.TestMySqlConnector();
                // Learning.ReflectPropertiesTryOut();
                // Learning.LearnDotNetCoreConfigurationApi();
                Learning.FricFracDalTest();
                Console.ReadKey();
            }
        }
    }
  4. En dat is het resultaat:
    Visual Studio Result Test ADO.NET DAL Delete
    Visual Studio Result Test ADO.NET DAL Delete

JI
2017-09-15 18:22:12